/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import POJO.Bannick;
import POJO.Gianhang;
import UTIL.HibernateUtil;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author nhlvu07db373
 */
public class BannickDAO  extends HibernateDaoSupport{

    private Session session;

    /**
     *Rút trích danh sách tất cả nick bị ban
     *
     */
    public List dsBannickAll() {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Bannick.class);
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Rút trích tất cả các nick user bị ban có phân trang
     * @param firstResult vị trí bắt đầu lấy
     * @param maxResults số dòng tối đa
     * @return danh sách các dòng thỏa điều kiện kiểu trả về là List(ArrayList) như nhau
     * @throws Throwable 
     */
    public List lstBannickAll(int firstResult, int maxResults) throws Throwable {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Bannick.class);
            crit.setFirstResult(firstResult);
            crit.setMaxResults(maxResults);
            list = crit.list();
            ts.commit();
            session.flush();

        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;

    }

    /**
     * Lấy chi tiết ban nick
     * @param maBanick mã banick
     * @return Bannick (Pojo)
     */
    public Bannick getBannick(String maBanick) {
        Bannick Bn = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Gianhang.class).add(Restrictions.like("maBanNick", maBanick));
            List list = crit.list();
            Bn = (Bannick) list.get(0);
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return Bn;
    }

    /**
     * Bannick người dùng hay cập nhật trạng thái cho người dùng
     * @param Bn Bannick POJO
     * @return kêt quả trả true hay false
     */
    public boolean saveBannick(Bannick Bn) {
        boolean kq = false;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            String maBannick = new GetIDDAO().getID("BAN", "bannick", "MaBanNick");
            if (maBannick.length() > 0) {
                Bn.setMaBanNick(maBannick);
                session.saveOrUpdate(Bn);
                ts.commit();
                session.flush();
                kq = true;
            }
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    /**
     * Xóa record banick 
     * @param Bn Bannick POJO cần xóa
     * @return Kết quả là true nếu thành công và ngược lại
     */
    public boolean deleteBannick(Bannick Bn) {
        session = HibernateUtil.getSessionFactory().openSession();
        boolean kq = false;
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            session.delete(Bn);
            ts.commit();
            session.flush();
            kq = true;
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    /**
     * Đánh dấu xóa record banick 
     * @param Bn Bannick POJO cần đánh dấu xóa
     * @return Kết quả là true nếu thành công và ngược lại
     */
    public boolean danhdaudeleteBannick(Bannick Bn) {
        Bn.setTinhTrang(0);
        return saveBannick(Bn);

    }
    /**
     * Kiểm tra nick người dùng..nếu hết hạn bannick thì tự động gỡ bannick
     * @param maNguoiDung
     * @return Kết quả là true nếu người dùng bị ban nick và ngược lại
     */
    public boolean kiemtranguoidung(String maNguoiDung){
        boolean kq=true;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria cr =session.createCriteria(Bannick.class).add(Restrictions.
                    and(Restrictions.like("maNguoiDung", maNguoiDung),
                    Restrictions.like("tinhTrang", 0)));
            Bannick Bn=(Bannick) cr.list().get(0);
            if(Bn!=null){
                //SS ngày hết hạn với ngày hiện tại và cập nhật cho d
                int d=0;
                Date dd=new Date(System.currentTimeMillis());
                d=Bn.getNgayHetHan().compareTo(dd);
                if(d>=0){
                    kq=false;
                    Bn.setTinhTrang(0);
                    saveBannick(Bn);
                }else{                    
                    kq=true;
                }
            }else{
                kq=false;
            }
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();               
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }
}
